home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / gnu / gnulib / dkbtrace / pbmplus / source / pgm / pgmtofit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-06  |  3.6 KB  |  117 lines

  1. /* pgmtofits.c - read a portable pixmap and produce a FITS file
  2. **
  3. ** Copyright (C) 1989 by Wilson H. Bent (whb@hoh-2.att.com).
  4. **
  5. ** Permission to use, copy, modify, and distribute this software and its
  6. ** documentation for any purpose and without fee is hereby granted, provided
  7. ** that the above copyright notice appear in all copies and that both that
  8. ** copyright notice and this permission notice appear in supporting
  9. ** documentation.  This software is provided "as is" without express or
  10. ** implied warranty.
  11. */
  12.  
  13. #include "pgm.h"
  14.  
  15. static void putFitsHead ARGS(( int cols, int rows, gray maxval ));
  16. static void write_card ARGS(( char* str ));
  17.  
  18. void
  19. main( argc, argv )
  20. int argc;
  21. char* argv[];
  22.     {
  23.     FILE* ifp;
  24.     gray* grayrow;
  25.     register gray* gP;
  26.     int argn, rows, cols, i, format;
  27.     register int col, row;
  28.     gray maxval;
  29.  
  30.     pgm_init( &argc, argv );
  31.  
  32.     argn = 1;
  33.  
  34.     if ( argn < argc )
  35.     {
  36.     ifp = pm_openr( argv[argn] );
  37.     ++argn;
  38.     }
  39.     else
  40.     ifp = stdin;
  41.  
  42.     if ( argn != argc )
  43.     pm_usage( "[pgmfile]" );
  44.  
  45.     pgm_readpgminit( ifp, &cols, &rows, &maxval, &format );
  46.     if ( maxval > 255 )
  47.     pm_error( "maxval (%d) is greater than maximum of 255", maxval );
  48.     grayrow = pgm_allocrow( cols );
  49.  
  50.     putFitsHead( cols, rows, maxval );
  51.  
  52.     for ( row = 0; row < rows; ++row )
  53.     {
  54.     pgm_readpgmrow( ifp, grayrow, cols, maxval, format );
  55.     for ( col = 0, gP = grayrow; col < cols; ++col, ++gP )
  56.         putchar( *gP );
  57.     }
  58.  
  59.     for ( i = ( rows * cols ) % 2880; i < 2880; ++i )
  60.     putchar( '\0' );
  61.  
  62.     pm_close( ifp );
  63.  
  64.     pm_close (stdout);
  65.  
  66.     exit( 0 );
  67.     }
  68.  
  69. #if __STDC__
  70. static void
  71. putFitsHead( int cols, int rows, gray maxval )
  72. #else /*__STDC__*/
  73. static void
  74. putFitsHead( cols, rows, maxval )
  75. int cols, rows;
  76. gray maxval;
  77. #endif /*__STDC__*/
  78.     {
  79.     int i = 0;
  80.     char card[81];
  81.  
  82.     sprintf( card, "SIMPLE  =                    T                                                  " );
  83.     write_card( card ); ++i;
  84.     sprintf( card, "BITPIX  =                    8                                                  " );
  85.     write_card( card ); ++i;
  86.     sprintf( card, "NAXIS   =                    2                                                  " );
  87.     write_card( card ); ++i;
  88.     sprintf( card, "NAXIS1  =           %10d                                                  ", cols );
  89.     write_card( card ); ++i;
  90.     sprintf( card, "NAXIS2  =           %10d                                                  ", rows );
  91.     write_card( card ); ++i;
  92.     sprintf( card, "DATAMIN =           %10d                                                  ", 0 );
  93.     write_card( card ); ++i;
  94.     sprintf( card, "DATAMAX =           %10d                                                  ", (int) maxval );
  95.     write_card( card ); ++i;
  96.     sprintf( card, "BZERO   =                  0.0                                                  " );
  97.     write_card( card ); ++i;
  98.     sprintf( card, "BSCALE  =                  1.0                                                  " );
  99.     write_card( card ); ++i;
  100.     sprintf( card, "HISTORY Created by fitstopgm.                                                   " );
  101.     write_card( card ); ++i;
  102.     sprintf( card, "END                                                                             " );
  103.     write_card( card ); ++i;
  104.     sprintf( card, "                                                                                " );
  105.     while ( i < 36 )
  106.     {
  107.     write_card( card ); ++i;
  108.     }
  109.     }
  110.  
  111. static void
  112. write_card( str )
  113. char* str;
  114.     {
  115.     fwrite( str, sizeof(char), 80, stdout );
  116.     }
  117.